/*
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  (C) Copyright 2004, Li Chunqiang (chunqiang_li@c-sky.com)
 *  (C) Copyright 2009, Hu Junshan (junshan_hu@c-sky.com)
 *  (C) Copyright 2009, C-SKY Microsystems Co., Ltd. (www.c-sky.com)
 *  
 */ 
  
#ifndef __ARCH_CKCORE_TERMBITS_H__
#define __ARCH_CKCORE_TERMBITS_H__

#include <linux/posix_types.h>

typedef unsigned char	cc_t;
typedef unsigned int	speed_t;
typedef unsigned int	tcflag_t;

#define NCCS 19
struct termios {
	tcflag_t c_iflag;		/* input mode flags */
	tcflag_t c_oflag;		/* output mode flags */
	tcflag_t c_cflag;		/* control mode flags */
	tcflag_t c_lflag;		/* local mode flags */
	cc_t c_line;			/* line discipline */
	cc_t c_cc[NCCS];		/* control characters */
};

struct termios2 {
	tcflag_t c_iflag;		/* input mode flags */
	tcflag_t c_oflag;		/* output mode flags */
	tcflag_t c_cflag;		/* control mode flags */
	tcflag_t c_lflag;		/* local mode flags */
	cc_t c_line;			/* line discipline */
	cc_t c_cc[NCCS];		/* control characters */
	speed_t c_ispeed;		/* input speed */
	speed_t c_ospeed;		/* output speed */
};

struct ktermios {
	tcflag_t c_iflag;		/* input mode flags */
	tcflag_t c_oflag;		/* output mode flags */
	tcflag_t c_cflag;		/* control mode flags */
	tcflag_t c_lflag;		/* local mode flags */
	cc_t c_line;			/* line discipline */
	cc_t c_cc[NCCS];		/* control characters */
	speed_t c_ispeed;		/* input speed */
	speed_t c_ospeed;		/* output speed */
};

/* c_cc characters */
#define VINTR 		0
#define VQUIT 		1
#define VERASE 		2
#define VKILL 		3
#define VEOF 		4
#define VTIME 		5
#define VMIN 		6
#define VSWTC 		7
#define VSTART 		8
#define VSTOP 		9
#define VSUSP 		10
#define VEOL 		11
#define VREPRINT 	12
#define VDISCARD 	13
#define VWERASE 	14
#define VLNEXT 		15
#define VEOL2 		16

/* c_iflag bits */
#define IGNBRK		0000001
#define BRKINT		0000002
#define IGNPAR		0000004
#define PARMRK		0000010
#define INPCK		0000020
#define ISTRIP		0000040
#define INLCR		0000100
#define IGNCR		0000200
#define ICRNL		0000400
#define IUCLC		0001000
#define IXON		0002000
#define IXANY		0004000
#define IXOFF		0010000
#define IMAXBEL		0020000
#define IUTF8		0040000

/* c_oflag bits */
#define OPOST		0000001
#define OLCUC		0000002
#define ONLCR		0000004
#define OCRNL		0000010
#define ONOCR		0000020
#define ONLRET		0000040
#define OFILL		0000100
#define OFDEL		0000200
#define NLDLY		0000400
#define NL0			0000000
#define NL1			0000400
#define CRDLY		0003000
#define CR0			0000000
#define CR1			0001000
#define CR2			0002000
#define CR3			0003000
#define TABDLY		0014000
#define TAB0		0000000
#define TAB1		0004000
#define TAB2		0010000
#define TAB3		0014000
#define XTABS		0014000
#define BSDLY		0020000
#define BS0			0000000
#define BS1			0020000
#define VTDLY		0040000
#define VT0			0000000
#define VT1			0040000
#define FFDLY		0100000
#define FF0			0000000
#define FF1			0100000

/* c_cflag bit meaning */
#define CBAUD		0010017
#define B0			0000000		/* hang up */
#define B50			0000001
#define B75			0000002
#define B110		0000003
#define B134		0000004
#define B150		0000005
#define B200		0000006
#define B300		0000007
#define B600		0000010
#define B1200		0000011
#define B1800		0000012
#define B2400		0000013
#define B4800		0000014
#define B9600		0000015
#define B19200		0000016
#define B38400		0000017
#define EXTA 		B19200
#define EXTB 		B38400
#define CSIZE		0000060
#define CS5			0000000
#define CS6			0000020
#define CS7			0000040
#define CS8			0000060
#define CSTOPB		0000100
#define CREAD		0000200
#define PARENB		0000400
#define PARODD		0001000
#define HUPCL		0002000
#define CLOCAL		0004000
#define CBAUDEX 	0010000
#define BOTHER 		0010000
#define B57600 		0010001
#define B115200 	0010002
#define B230400 	0010003
#define B460800 	0010004
#define B500000 	0010005
#define B576000 	0010006
#define B921600 	0010007
#define B1000000 	0010010
#define B1152000 	0010011
#define B1500000 	0010012
#define B2000000 	0010013
#define B2500000 	0010014
#define B3000000 	0010015
#define B3500000 	0010016
#define B4000000 	0010017
#define CIBAUD		002003600000		/* input baud rate */
#define CMSPAR		010000000000		/* mark or space (stick) parity */
#define CRTSCTS		020000000000		/* flow control */

#define  IBSHIFT	16					/* Shift from CBAUD to CIBAUD */

/* c_lflag bits */
#define ISIG		0000001
#define ICANON		0000002
#define XCASE		0000004
#define ECHO		0000010
#define ECHOE		0000020
#define ECHOK		0000040
#define ECHONL		0000100
#define NOFLSH		0000200
#define TOSTOP		0000400
#define ECHOCTL		0001000
#define ECHOPRT		0002000
#define ECHOKE		0004000
#define FLUSHO		0010000
#define PENDIN		0040000
#define IEXTEN		0100000

/* tcflow() and TCXONC use these */
#define	TCOOFF		0
#define	TCOON		1
#define	TCIOFF		2
#define	TCION		3

/* tcflush() and TCFLSH use these */
#define	TCIFLUSH	0
#define	TCOFLUSH	1
#define	TCIOFLUSH	2

/* tcsetattr uses these */
#define	TCSANOW		0
#define	TCSADRAIN	1
#define	TCSAFLUSH	2

#endif /* __ARCH_CKCORE_TERMBITS_H__ */
